gpointer key, value;
gboolean found_corruption = FALSE;
guint n_partial = 0;
+ g_autoptr(GHashTable) all_refs = NULL;
g_autoptr(GHashTable) objects = NULL;
g_autoptr(GHashTable) commits = NULL;
g_autoptr(GPtrArray) tombstones = NULL;
if (!ostree_option_context_parse (context, options, &argc, &argv, OSTREE_BUILTIN_FLAG_NONE, &repo, cancellable, error))
goto out;
+ if (!opt_quiet)
+ g_print ("Validating refs...\n");
+
+ /* Validate that the commit for each ref is available */
+ if (!ostree_repo_list_refs (repo, NULL, &all_refs,
+ cancellable, error))
+ return FALSE;
+ g_hash_table_iter_init (&hash_iter, all_refs);
+ while (g_hash_table_iter_next (&hash_iter, &key, &value))
+ {
+ const char *refname = key;
+ const char *checksum = value;
+ g_autoptr(GVariant) commit = NULL;
+ if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT,
+ checksum, &commit, error))
+ {
+ g_prefix_error (error, "Loading commit for ref %s: ", refname);
+ goto out;
+ }
+ }
+
if (!opt_quiet)
g_print ("Enumerating objects...\n");
set -euo pipefail
-echo "1..2"
+echo "1..3"
. $(dirname $0)/libtest.sh
+cd ${test_tmpdir}
+rm repo files -rf
setup_test_repository "bare"
$OSTREE checkout test2 checkout-test2
cd checkout-test2
echo "ok chmod"
cd ${test_tmpdir}
+rm repo files -rf
+setup_test_repository "bare"
rm checkout-test2 -rf
$OSTREE checkout test2 checkout-test2
cd checkout-test2
$OSTREE fsck -q --delete && (echo 1>&2 "fsck unexpectedly succeeded"; exit 1)
echo "ok chmod"
+
+cd ${test_tmpdir}
+rm repo files -rf
+setup_test_repository "bare"
+find repo/ -name '*.commit' -delete
+if $OSTREE fsck -q 2>err.txt; then
+ assert_not_reached "fsck unexpectedly succeeded"
+fi
+assert_file_has_content_literal err.txt "Loading commit for ref test2: No such metadata object"
+
+echo "ok missing commit"